2-SAT问题 信息学竞赛 OI ACM O(m) O(nm)
2-SAT问题
张天翔
blog.csdn.net/hzoi_ztx
ztx97@qq.com
前置技能
- 拓扑排序
- 基本逻辑运算
- 强联通分量
问题模型
给出n个布尔值组成的序列 { Ai} ,给出一些限制,每个限制最多针对两个元素(故称为“2-SAT”),先要求确定 A 序列的值以满足所有限制关系。
问题分析
首先列出7种有意义的限制(其实真正有意义的为5个),如下:
-1:
-2: Ai=0
-3: Ai AND Aj=0
-4: Ai OR Aj=1
-5: Ai OR(NOT Aj)=1
-6: Ai XOR Aj=1
-7: Ai XOR Aj=0
所有可能的限制条件如下
01: Ai=1 有意义
02: Ai=0 有意义
03: Ai AND Aj=1⇔(Ai=1)AND(Aj=1)(两个限制−1)
04: Ai AND Aj=0 有意义
05: Ai AND(NOT Aj)=1⇔(Ai=1)AND(Aj=0)(限制−1,−2)
06: Ai AND(NOT Aj)=0⇔(Ai=0)OR(Aj=1)⇔(NOT Ai)OR Aj=1(限制−5)
07: (NOT Ai)AND Aj=1⇔限制05
08: (NOT Ai)AND Aj=0⇔限制06
09: (N